import os
import sys
import shutil

def build():
    # 设置环境变量以处理中文编码
    os.environ['PYTHONIOENCODING'] = 'utf-8'
    
    # 清理之前的构建文件
    if os.path.exists('dist'):
        shutil.rmtree('dist')
    if os.path.exists('build'):
        shutil.rmtree('build')
    if os.path.exists('main.build'):
        shutil.rmtree('main.build')
    if os.path.exists('main.dist'):
        shutil.rmtree('main.dist')
    if os.path.exists('main.onefile-build'):
        shutil.rmtree('main.onefile-build')
    
    # 构建命令
    cmd = (
        'python -m nuitka '
        '--standalone '  # 使用文件夹模式而不是单文件模式
        '--windows-console-mode=disable '
        '--include-data-dir=templates=templates '
        '--plugin-enable=pyside6 '
        '--include-qt-plugins=platforms,styles,imageformats,iconengines '  # 只包含必要的Qt插件
        '--include-package=PySide6.QtCore '  # 只包含必要的Qt模块
        '--include-package=PySide6.QtGui '
        '--include-package=PySide6.QtWidgets '
        '--include-package=flask '
        '--include-package=flask_socketio '
        '--include-package=pyautogui '
        '--include-package=engineio '
        '--include-package=socketio '
        '--include-package=werkzeug '
        '--include-package=qrcode '
        '--include-package=PIL '
        '--include-package=PIL._imaging '  # 只包含必要的PIL模块
        '--output-dir=dist '
        '--output-filename=PCRemoteControl '  # 不需要.exe后缀
        '--remove-output '
        '--company-name=Senmoya '
        '--product-name=PCRemoteControl '
        '--file-description="PC Remote Control" '
        '--copyright="Copyright 2024" '
        '--file-version=1.0.0 '
        '--product-version=1.0.0 '
        '--msvc=latest '  # 使用 MSVC 编译器
        '--windows-icon-from-ico=icon.ico '  # 添加图标设置
        '--lto=yes '  # 启用链接时优化
        '--jobs=4 '  # 使用4个线程并行编译
        '--assume-yes-for-downloads '  # 自动下载依赖
        '--remove-output '  # 移除中间文件
        '--quiet '  # 减少输出信息
        '--show-progress '  # 显示进度
        '--show-memory '  # 显示内存使用
        'main.py'
    ).replace('  ', ' ')  # 移除多余的空格
    
    # 执行打包命令
    print("开始打包...")
    print("这可能需要几分钟时间，请耐心等待...")
    result = os.system(cmd)
    
    if result == 0:
        print("\n打包完成！")
        print("生成的文件在 dist 目录中：")
        print("- PCRemoteControl - 程序文件夹")
        print("\n使用说明：")
        print("1. 直接运行 dist/PCRemoteControl/PCRemoteControl.exe 即可启动程序")
        print("2. 程序会在系统托盘显示图标")
        print("3. 通过手机浏览器访问显示的IP地址即可控制电脑")
        
        # 如果打包成功，尝试重命名为中文名称
        try:
            src = os.path.join('dist', 'PCRemoteControl')
            dst = os.path.join('dist', 'PC遥控器')
            if os.path.exists(dst):
                shutil.rmtree(dst)
            os.rename(src, dst)
            print("\n已将文件夹重命名为：PC遥控器")
            
            # 添加防火墙规则
            exe_path = os.path.abspath(os.path.join(dst, 'PCRemoteControl.exe'))
            add_firewall_rule(exe_path)
            
        except Exception as e:
            print("\n重命名文件夹失败，请手动重命名")
            print(f"错误信息：{str(e)}")
    else:
        print("\n打包失败！请检查以下可能的原因：")
        print("1. 是否已安装所有必需的包（运行：pip install -r requirements.txt）")
        print("2. Python版本是否兼容（推荐使用Python 3.8-3.13）")
        print("3. 是否有足够的磁盘空间")
        print("4. 查看上方的错误信息以获取更多细节")

if __name__ == "__main__":
    build() 